LINUX.ORG.RU

Сообщения plambir

 

[Emacs] смена текущей директории при переходе на ошибку

При переходе на ошибку в еще не открытый файл, emacs меняет для него значение текущей директории. Как запретить emacs менять текущую директорию? Или может можно как-нибудь поведения перехода по ошибкам изменить?

 

plambir
()

[C++] Работа с fsream, чтение и запись.

Есть такой код, он должен дописать в конец файла строку, вывести весь файл, и под конец дописать еще одну строку в файл.

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int
main(int argc, char *argv[])
{
  fstream file;
  string str;

  file.open("file", fstream::in | fstream::out);

  if (!file.is_open())
    file.open("file", fstream::in | fstream::out | fstream::trunc);

  if (file.is_open())
    {
      file.seekp(0, ios::end);
      file << "hello\n";
   
      file.seekg(0, ios::beg);
      while (file >> str)
        {
          cout << str << endl;
        }

      file.seekp(0, ios::end);
      file << "end\n";
      file.flush();
      file.close();
    }
  return 0;
}

Строка `end` не запишется. Почему, не как не пойму.

 

plambir
()

Emacs default direcotory

Как сделать, что бы при открытие нового файла emacs не переходил в директорию с файлом, а делал это только по команде `cd`?

plambir
()

Сборка GUI приложений из Linux для Windows.

Как собрать графическое приложение на gtk или qt из Linux для Windows?

plambir
()

Emacs: flymake, scons, C и C++

В emacs есть такая забавная шняга как flymake, и все бы хорошо, но для C и С++ flymake'у требуется Makefile. И все бы ничего, но я использую scons. Пока подружил так, для emacs:

(defun flymake-c-init ()
  (let* ((temp-file   (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-inplace))
         (local-file  (file-relative-name
                       temp-file
                       (file-name-directory buffer-file-name))))
    (list "/home/alex/.emacs.d/tools/fly.sh" (list (concat "check=" local-file)))))
(push '("\\.c$" flymake-c-init) flymake-allowed-file-name-masks)
(push '("\\.h$" flymake-cc-init) flymake-allowed-file-name-masks)

(add-hook 'c-mode-hook
          '(lambda ()
	     (if (and (not (null buffer-file-name)) (file-writable-p buffer-file-name))
		 (flymake-mode))))

(defun flymake-cc-init ()
  (let* ((temp-file   (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-inplace))
         (local-file  (file-relative-name
                       temp-file
                       (file-name-directory buffer-file-name))))
    (list "/home/alex/fly.sh" (list (concat "check=" local-file)))))
(push '("\\.cpp$" flymake-cc-init) flymake-allowed-file-name-masks)
(push '("\\.hpp$" flymake-cc-init) flymake-allowed-file-name-masks)

(add-hook 'c++-mode-hook
          '(lambda ()
	     (if (and (not (null buffer-file-name)) (file-writable-p buffer-file-name))
		 (flymake-mode))))
fly.sh:
#!/bin/sh

check()
{
    FILE=$(echo $1 | grep -E -o -e '[^=]*\.(c|cpp|h|hpp)$')
    case $FILE in
        *.c) gcc -Wall -fsyntax-only $FILE;;
        *.cpp|*.h|*.hpp) g++ -Wall -fsyntax-only $FILE;;
    esac
}

if [ -f SConstruct ]
then
    if [ "$(cat SConstruct | grep 'flymake on')" != "" ]
    then
        scons -Q $1
    else
        check $1
    fi
else
    check $1
fi
В SConstruct добавляется следующие:
#flymake on
import os
import re
import string

def check(env):
    flags = ""

    if re.match(".*\.c$", ARGUMENTS.get('check')) != None:
        flags += "gcc "
    else:
        if re.match(".*\.(cpp|h|hpp)$", ARGUMENTS.get('check')) != None:
            flags += "g++ "
        else:
            return

    for s in env['CPPPATH']:
        flags += "-I" + s + " "

    flags +=  "-Wall -fsyntax-only "

    flags += ARGUMENTS.get('check')

    os.system("%s" % flags)

...

if ARGUMENTS.get('check') != None:
    check(env)
    exit(0)

...
fly.sh нужен для того что бы в случае если файла SConstruct не существует, запустить команду `gcc -Wall -fsyntax-only` для файла. SConstruct используется если требуется указать путь для поиска директорий с заголовочными файлами.

И все бы ничего, но в SConstruct как-то много писать нужно, можно конечно это все в сниппеты загнать, но хотелось бы обойтись меньшими телодвижениями. Кто что подскажет?

plambir
()

shell скрипт для установки обоев.

Вот такой вот скрипт, при каждом запуске устанавливает в качестве обоев случайное изображение из дериктории WALL_DIR. Формат должен быть jpg.

#!/bin/sh

set_wallpaper()
{
    NFILES=`echo $@ | wc -w`
    shift `expr $RANDOM % $NFILES`
    feh --bg-scale $1
}

RANDOM=`date +'%s'` # set random generator
WALL_DIR=/home/user/wallpapers
set_wallpaper `echo $WALL_DIR/*.jpg`

Если кто подскажет как сделать выборку не только по jpg файлам, буду признателен.

plambir
()

RSS подписка на новые темы