tag:blogger.com,1999:blog-67251675375131952572024-03-13T18:57:39.553+06:00Coder To CoderТехнические мысли/советы/эксперименты от программистаUnknownnoreply@blogger.comBlogger5125tag:blogger.com,1999:blog-6725167537513195257.post-27484910577695702372009-03-21T01:36:00.003+06:002009-07-09T02:52:33.730+07:00Решения, Проекты, файлы и быстрая навигация<img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 133px; height: 200px;" src="http://1.bp.blogspot.com/_3j0ETMitHcs/SlT4sqsEPSI/AAAAAAAABF4/2xjhEO8fJKg/s200/project_folders.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5356179303107411234" /><br />На работе я работаю. И это не удивительно, а может и наоборот. Каждую ночь у меня автоматически забираются все изменения из p4, резолвяца конфликты, потом делается дефрагментация диска, создается солюшен и все это дело билдится для нескольких конфигурация и платформ. Сам солюшен получается достаточно большой. Когда открываешь его всеми любимой VS, то процесс затягивается на несколько минут. Если еще и к тому стоит VisualAssist - то вообще можно сделать обеденный перерыв, или просто наслаждаться белым экраном. В принципе солюшен нужен лишь для навигации по файлам проектов. Для Emacs уже давно придумали filecache.el. И Sasha Chua <a href="http://sachachua.com/wp/2008/12/19/emacs-working-with-multiple-source-trees/">описала у себя на сайте процесс работы с файлами в проектах</a>. В принципе все классно, но Emacs тоже замирает на пару минут, если у тебя большое дерево исходников. <br />Что сделал я? Опять же ночью, пока я сплю, после того, как мой скрипт забрал изменения из p4, запускается другой скрипт, который создает список файлов для Emacs filecache.el. Утром я прихожу, нажимаю ESC ESC f - и ido мне предлогает найти файл из моего проекта. Класс?Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-6725167537513195257.post-89728095201986388892008-05-23T00:18:00.003+07:002008-05-23T00:23:25.798+07:00XEmacs в MicrosoftКак-то пролетала новость, что Microsoft собирается создать Emacs с использованием технологии .NET. Вранье конечно, НО...<br />Вчера смотрел скучную видео-презентацию "<a href="http://channel9.msdn.com/showpost.aspx?postid=405345">Russell Hadley: The Route to C++ Code Optimization</a>" и заметил, что чувак то использует XEmacs. А как же славная Visual Studio?Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-6725167537513195257.post-22415204014576587712008-03-29T00:13:00.005+06:002008-03-29T00:37:21.570+06:00Search-at-point или как быстро найти словоНадоело мне нажимать C-s C-w, чтоб искать слово. Особенно неудобно, если в слове есть _.<br />Поискал в интернете уже готовое, кое-что нашел, но все таки решил написать свое.<br /><br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>(defvar sap-overlay '()<br /> "last highlighted word")<br /> <br />(defface sap-face<br /> '((((type tty pc) (class color))<br /> (:background "magenta4" :foreground "cyan1"))<br /> (((class color) (background light))<br /> (:background "magenta4" :foreground "lightskyblue1"))<br /> (((class color) (background dark))<br /> (:background "palevioletred2" :foreground "brown4"))<br /> (t (:inverse-video t)))<br /> "Face for highlighting search-at-point matches."<br /> :group 'sap-faces)<br /> <br />(defvar sap-face 'sap-face)<br /><br />(defun isearch-highlight-found-word (curword flag)<br /> (if (= flag 1)<br /> (progn<br /> (setq pt1 (- (point) (length curword)))<br /> (setq pt2 (point))<br /> )<br /> (progn<br /> (setq pt2 (+ (point) (length curword)))<br /> (setq pt1 (point))<br /> )<br /> )<br /> (message "Found at %s" (what-line))<br /> (if sap-overlay (delete-overlay sap-overlay))<br /> (setq sap-overlay (make-overlay 1 1))<br /> (overlay-put sap-overlay 'face sap-face)<br /> (overlay-put sap-overlay 'modification-hooks (list 'delete-this-overlay))<br /> (move-overlay sap-overlay pt1 pt2)<br />)<br /><br />(defun isearch-forward-current-word ()<br /> "search forward at point feature."<br /> (interactive)<br /> (if (thing-at-point 'symbol)<br /> (progn <br /> (let ((re-curword) (curword) (offset (point)) <br /> (old-case-fold-search case-fold-search) )<br /> (setq curword (thing-at-point 'symbol))<br /> (setq re-curword (concat "\\<" (thing-at-point 'symbol) "\\>") )<br /> (beginning-of-thing 'symbol)<br /> (setq offset (- offset (point))) ; offset from start of symbol/word<br /> (setq pt1 offset) ; offset from start of symbol/word<br /> (setq offset (- (length curword) offset)) ; offset from end<br /> (setq pt2 offset) ; offset from end<br /> (forward-char)<br /> (setq case-fold-search nil)<br /> (if (re-search-forward re-curword nil t)<br /> (isearch-highlight-found-word curword 1)<br /><br /> (backward-char offset)<br /> ;; else<br /> (progn (goto-char (point-min))<br /> (if (re-search-forward re-curword nil t)<br /> (isearch-highlight-found-word curword 1)<br /><br /><br /> (progn (message "Searching from top. %s" (what-line))<br /> (backward-char offset))<br /> ;; else<br /> (message "Searching from top: Not found"))))<br /> (setq case-fold-search old-case-fold-search))<br /> )<br /> (progn<br /> (if sap-overlay (delete-overlay sap-overlay))<br /> ) <br /> )<br />)<br /><br />(defun isearch-backward-current-word ()<br /> "Mimic vi search backwards at point feature."<br /> (interactive)<br /> (if (thing-at-point 'symbol) (progn<br /> (let ((re-curword) (curword) (offset (point)) <br /> (old-case-fold-search case-fold-search) )<br /> (setq curword (thing-at-point 'symbol))<br /> (setq re-curword (concat "\\<" curword "\\>") )<br /> (beginning-of-thing 'symbol)<br /> (setq offset (- offset (point))) ; offset from start of symbol/word<br /> (forward-char)<br /> (setq case-fold-search nil)<br /> (if (re-search-backward re-curword nil t)<br /> (isearch-highlight-found-word curword 0)<br /> (forward-char offset)<br /> ;; else<br /> (progn (goto-char (point-max))<br /> (if (re-search-backward re-curword nil t)<br /> (isearch-highlight-found-word curword 0)<br /> (progn (message "Searching from bottom. %s" (what-line))<br /> (forward-char offset))<br /> ;; else<br /> (message "Searching from bottom: Not found"))))<br /> (setq case-fold-search old-case-fold-search)))<br /> (progn<br /> (if sap-overlay (delete-overlay sap-overlay))<br /> )<br /> );if<br />)<br /> <br />;; F3 will search the word under the cursor<br />;; Ctrl Shift F3 will search backward<br />(global-set-key [f3] 'isearch-forward-current-word)<br />(global-set-key [(shift f3)] 'isearch-backward-current-word)<br /><br /></code></pre><br /><br /></span>Нажимаем F3 на слове, чтоб искать вперед и Shift-F3 - для поиска назад.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6725167537513195257.post-17772041164985838632007-10-12T05:12:00.001+07:002007-10-12T05:18:32.559+07:00Emacs RegExpПотратил полдня, чтоб разобраться, как работают регЭкспы в Имаксе. В итоге, плюнул и написал за 2 минуты питоновский скрипт, который парсит лог-файл, выкидывает ненужное и формирует результаты в нужном мне формате. Еще пол-дня потратил, чтоб из моих же результатов в Exсel-е , сделать другой отчет. Вопрос: не проще ли сразу было написать один питоновский скрипт для всего?<br />Зачем извращать Имаксовские регулярные выражения, почему нельзя использовать стандартные ?<br />Если кто знает нормальные руководства по имаксовским регЭкспам - пожалуйста, оставьте комент. Может, когда нибудь, я дорасту до них, но не сейчас.Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-6725167537513195257.post-2680716615407509432007-09-26T05:28:00.001+07:002008-05-23T00:45:08.878+07:00Emacs - Dired в одном буфереИспользуй 'А' вместо Enter в Dired-mode при навигации по директориям и Emacs не будет создавать новый буфер для каждой папки.Unknownnoreply@blogger.com0